package widok;

import dzienPracy.DzienPracy;
import model.TableModel;
import presenter.Presenter;

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class Okienko extends JFrame {
    public static final String FILE_NAME = "dane.dat";  // --> static przy zmiennej powoduje że odwołując się do danej zmiennej z innej klasy nie musimy tworzyć jej obietku

    private SrodkowyPanel srodkowyPanel;

    public Okienko() {
        ustawOkienko();
        ustawKomponenty();
    }

    private void ustawOkienko() {
        setSize(800, 500);
        setTitle("Termianrz wejść i wyjść");
        setLocationRelativeTo(null);
        addWindowListener(new SluchaczZamykaniaOkna());

        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        } catch (Exception e) {
            JOptionPane.showMessageDialog(
                    null,
                    "Wystąpił błąd podczas ładowania wyglądu okna: " + e,
                    "Uwaga",
                    JOptionPane.INFORMATION_MESSAGE);
        }
    }

    private void ustawKomponenty() {
        GornyPanel gornyPanel = new GornyPanel();
        add(gornyPanel, BorderLayout.NORTH);

        srodkowyPanel = new SrodkowyPanel();
        add(srodkowyPanel, BorderLayout.CENTER);

        DolnyPanel dolnyPanel = new DolnyPanel();
        add(dolnyPanel, BorderLayout.SOUTH);

        Presenter presenter = new Presenter();

        presenter.setDateChooser(gornyPanel.getDateChooser());
        presenter.setGodzinaWejsciaSP(gornyPanel.getGodzinaWejsciaSP());
        presenter.setMinutaWejsciaSP(gornyPanel.getMinutaWejsciaSP());
        presenter.setGodzinaWyjsciaSP(gornyPanel.getGodzinaWyjsciaSP());
        presenter.setMinutaWyjsciaSP(gornyPanel.getMinutaWyjsciaSP());
        presenter.setZapiszBT(gornyPanel.getZapiszBT());
        presenter.setTabela(srodkowyPanel.getTabela());
        presenter.setUsunBT(srodkowyPanel.getUsunBT());
        presenter.setIloscGodzinLB(dolnyPanel.getIloscGodzinLB());

    }

    class SluchaczZamykaniaOkna extends WindowAdapter {
        @Override
        public void windowClosing(WindowEvent e) {
            TableModel tableModel = (TableModel)srodkowyPanel.getTabela().getModel();
            ArrayList<DzienPracy> wierszeTabeli = tableModel.getWierszeTabeli();

            try {
                FileOutputStream fos = new FileOutputStream(FILE_NAME);   // --> *.dat rozszerzenie do plików z zapisanymi obiektami, klasa FileOutputStream tworzy plik
                BufferedOutputStream bos = new BufferedOutputStream(fos);   // --> buforowane zapisywanie danych do pliku
                ObjectOutputStream oos = new ObjectOutputStream(bos);     // --> klasa odpowiadająca za zapisywanie obiektów do plików

                oos.writeObject(wierszeTabeli);
                oos.close();       // powinniśmy zamykać strumienie danych

            } catch (Exception e1) {
                JOptionPane.showMessageDialog(null, "Wystąpił błąd przy zapisywaniu do pliku", "Uwaga!", JOptionPane.ERROR_MESSAGE);
            }


        }
    }
}
